/**高阶函数----作为参数；函数作为参数的话，参数会变得更加灵活，
调用函数的方法forEach不用考虑函数是如何实现的；**/

//模拟forEach：遍历数组每个数字，并且返回数组的每一项
// 2个参数，第一个参数首先传一个数组，第二个是参数，遍历数组后， 每次对数组的处理操作是不同的，内容是变化的
function forEach( array, fn) {
    for( let i =0; i< array.length; i++) {
        fn(array[i])
    }
}

// 测试
let  arr = [1,2,3,4,7,8]
//item,用来接受item的每一项
forEach(arr,function(item){
    console.log(item)
})

//模拟：filter：过滤数组中满足条件的数据存储，返回最终结果
function fliter(arr, fn) {
    let   results = [] //存储结果
    for(let i=0; i< arr.length; i++){
        if(fn(arr[i])){ // 数组是否满足条件的每一项
            results.push(arr[i])
        }
    }
    return results
}

// 测试
let arrFliter= [2,1,56,8]
let f = fliter(arrFliter, function (item){
    return item % 2 == 0
})
console.log('过滤的结果',f)
// 高阶函数-----作为返回值
/*
*高阶函数语法，调用方式
*/

//once: 只让函数只执行一次，场景：在支付的时候，一个订单，用户点击多次按钮，只让用户执行一次
